home *** CD-ROM | disk | FTP | other *** search
- /*
- ** OpenURL - MUI preferences for openurl.library
- ** Written by Troels Walsted Hansen <troels@thule.no>
- ** Placed in the public domain.
- **
- ** This module contains the code to the BrowserEditWin Window.mui subclass.
- */
-
- #include "prefs_common.h"
- #include "prefs_main.h"
- #include "prefs_app.h"
- #include "prefs_browsereditwin.h"
-
- /**************************************************************************/
-
- static ULONG mNew (struct IClass *cl, Object *obj, struct opSet *msg);
- static ULONG mGet (struct IClass *cl, Object *obj, struct opGet *msg);
- static ULONG mWindow_Setup (struct IClass *cl, Object *obj, struct MUIP_Window_Setup *msg);
- static ULONG mOk (struct IClass *cl, Object *obj, struct MUIP_BrowserEditWin_Ok *msg);
-
- static SAVEDS ASM VOID ObjStrFunc(REG(a0) struct Hook *hook,
- REG(a2) Object *obj,
- REG(a1) Object *string);
-
- /**************************************************************************/
-
- static const char *Browser_PlaceHolders[] =
- {
- "%u|URL",
- NULL,
- };
-
- /**************************************************************************/
-
- static ULONG mNew(struct IClass *cl, Object *obj, struct opSet *msg)
- {
- Object *browserl, *infog, *names, *pathp, *ports, *portp,
- *cmdg, *shows, *tofronts, *openurlp, *openurlwp, *okb, *cancelb;
-
- struct URL_BrowserNode *bn = (struct URL_BrowserNode *)GetTagData(MUIA_BrowserEditWin_Browser, NULL, msg->ops_AttrList);
- browserl = (Object *)GetTagData(MUIA_BrowserEditWin_ListObj, NULL, msg->ops_AttrList);
-
- if(!bn || !browserl) return(0);
-
- obj = (Object *)DoSuperNew(cl, obj,
- MUIA_Window_ID, MAKE_ID('E', 'D', 'B', 'R'),
- MUIA_Window_Title, APPNAME " ยท Edit Browser",
- WindowContents, VGroup,
- Child, infog = ColGroup(2),
- GroupFrameT("Browser information"),
-
- Child, KeyLabel2("Name", 'n'),
- Child, names = StringObject,
- StringFrame,
- MUIA_CycleChain, TRUE,
- MUIA_ControlChar, 'n',
- MUIA_String_MaxLen, UBN_NAME_LEN,
- MUIA_String_Contents, bn->ubn_Name,
- MUIA_String_AdvanceOnCR, TRUE,
- End,
-
- Child, KeyLabel2("Path", 'p'),
- Child, pathp = PopplaceholderObject,
- MUIA_Popph_Array, Browser_PlaceHolders,
- MUIA_Popph_StringKey, 'p',
- MUIA_Popph_StringMaxLen, UBN_PATH_LEN,
- MUIA_Popph_Contents, bn->ubn_Path,
- MUIA_Popph_PopAsl, TRUE,
- MUIA_Popasl_Type, ASL_FileRequest,
- MUIA_String_AdvanceOnCR, TRUE,
- End,
-
- Child, KeyLabel2("ARexx port", 'a'),
- Child, portp = PopportObject,
- MUIA_Popstring_String, ports = StringObject,
- StringFrame,
- MUIA_CycleChain, TRUE,
- MUIA_ControlChar, 'a',
- MUIA_String_MaxLen, UBN_PORT_LEN,
- MUIA_String_Contents, bn->ubn_Port,
- MUIA_String_AdvanceOnCR, TRUE,
- End,
- MUIA_Popstring_Button, myPopButton(MUII_PopUp),
- MUIA_Popport_ARexxOnly, TRUE,
- End,
- End,
-
- Child, cmdg = ColGroup(2),
- GroupFrameT("ARexx commands"),
-
- Child, KeyLabel2("Show/Uniconify", 's'),
- Child, shows = StringObject,
- StringFrame,
- MUIA_CycleChain, TRUE,
- MUIA_ControlChar, 's',
- MUIA_String_MaxLen, UBN_SHOWCMD_LEN,
- MUIA_String_Contents, bn->ubn_ShowCmd,
- MUIA_String_AdvanceOnCR, TRUE,
- End,
-
- Child, KeyLabel2("Screen to front", 'f'),
- Child, tofronts = StringObject,
- StringFrame,
- MUIA_CycleChain, TRUE,
- MUIA_ControlChar, 'f',
- MUIA_String_MaxLen, UBN_TOFRONTCMD_LEN,
- MUIA_String_Contents, bn->ubn_ToFrontCmd,
- MUIA_String_AdvanceOnCR, TRUE,
- End,
-
- Child, KeyLabel2("Open URL...", 'u'),
- Child, openurlp = PopplaceholderObject,
- MUIA_Popph_Array, Browser_PlaceHolders,
- MUIA_Popph_StringKey, 'u',
- MUIA_Popph_StringMaxLen, UBN_OPENURLCMD_LEN,
- MUIA_Popph_Contents, bn->ubn_OpenURLCmd,
- MUIA_String_AdvanceOnCR, TRUE,
- End,
-
- Child, KeyLabel2("...in new window", 'w'),
- Child, openurlwp = PopplaceholderObject,
- MUIA_Popph_Array, Browser_PlaceHolders,
- MUIA_Popph_StringKey, 'w',
- MUIA_Popph_StringMaxLen, UBN_OPENURLWCMD_LEN,
- MUIA_Popph_Contents, bn->ubn_OpenURLWCmd,
- MUIA_String_AdvanceOnCR, TRUE,
- End,
- End,
-
- Child, ColGroup(3),
- Child, okb = SimpleButton("_Ok"),
- Child, RectangleObject, End,
- Child, cancelb = SimpleButton("_Cancel"),
- End,
- End,
- TAG_MORE, msg->ops_AttrList);
-
- if(obj)
- {
- struct BrowserEditWin_Data *data = INST_DATA(cl, obj);
- memset(data, '\0', sizeof(struct BrowserEditWin_Data));
-
- /* init instance data */
-
- data->Browser = bn;
- data->BrowserLstObj = browserl;
-
- data->InfoGrpObj = infog;
- data->NameStrObj = names;
- data->PathPopObj = pathp;
- data->PortStrObj = ports;
-
- data->CmdGrpObj = cmdg;
- data->ShowStrObj = shows;
- data->ToFrontStrObj = tofronts;
- data->OpenURLPopObj = openurlp;
- data->OpenURLWPopObj = openurlwp;
-
- data->OkButObj = okb;
- data->CancelButObj = cancelb;
-
- /* buttons */
-
- DoMethod(obj, MUIM_MultiSet, MUIA_CycleChain, TRUE, okb, cancelb, NULL);
-
- /* add hook */
-
- data->ObjStrHook.h_Entry = (HOOKFUNC)ObjStrFunc;
- data->ObjStrHook.h_Data = (APTR)xget(portp, MUIA_Popobject_ObjStrHook);
- set(portp, MUIA_Popobject_ObjStrHook, &data->ObjStrHook);
- }
-
- return((ULONG)obj);
- }
-
- /**************************************************************************/
-
- static ULONG mGet(struct IClass *cl, Object *obj, struct opGet *msg)
- {
- struct BrowserEditWin_Data *data = INST_DATA(cl,obj);
-
- switch(msg->opg_AttrID)
- {
- case MUIA_BrowserEditWin_Browser:
- *(msg->opg_Storage) = (ULONG)data->Browser;
- return(TRUE);
- }
-
- return(DoSuperMethodA(cl, obj, (Msg)msg));
- }
-
- /**************************************************************************/
-
- static ULONG mWindow_Setup(struct IClass *cl, Object *obj, struct MUIP_Window_Setup *msg)
- {
- struct BrowserEditWin_Data *data = INST_DATA(cl,obj);
-
- if (!DoSuperMethodA(cl,obj,(Msg)msg))
- return(FALSE);
-
- if(!data->NotifiesAdded)
- {
- /* buttons */
- DoMethod(data->OkButObj, MUIM_Notify, MUIA_Pressed, FALSE, obj, 1, MUIM_BrowserEditWin_Ok);
- DoMethod(data->CancelButObj, MUIM_Notify, MUIA_Pressed, FALSE, obj, 3, MUIM_Set, MUIA_Window_CloseRequest, TRUE);
-
- /* window notifies */
- DoMethod(obj, MUIM_Notify, MUIA_Window_CloseRequest, TRUE, _app(obj), 6, MUIM_Application_PushMethod, _app(obj), 3, MUIM_App_CloseWin, MUIA_BrowserEditWin_Browser, data->Browser);
-
- data->NotifiesAdded = TRUE;
- }
-
- return(TRUE);
- }
-
- /**************************************************************************/
-
- static ULONG mOk(struct IClass *cl, Object *obj, struct MUIP_BrowserEditWin_Ok *msg)
- {
- struct BrowserEditWin_Data *data = INST_DATA(cl,obj);
- struct URL_BrowserNode *bn = data->Browser;
- LONG visible, first, i;
-
- /* update the structure */
-
- strcpy(bn->ubn_Name, (char *)xget(data->NameStrObj, MUIA_String_Contents));
- strcpy(bn->ubn_Path, (char *)xget(data->PathPopObj, MUIA_Popph_Contents));
- strcpy(bn->ubn_Port, (char *)xget(data->PortStrObj, MUIA_String_Contents));
-
- strcpy(bn->ubn_ShowCmd, (char *)xget(data->ShowStrObj, MUIA_String_Contents));
- strcpy(bn->ubn_ToFrontCmd, (char *)xget(data->ToFrontStrObj, MUIA_String_Contents));
- strcpy(bn->ubn_OpenURLCmd, (char *)xget(data->OpenURLPopObj, MUIA_Popph_Contents));
- strcpy(bn->ubn_OpenURLWCmd, (char *)xget(data->OpenURLWPopObj, MUIA_Popph_Contents));
-
- /* update the listview */
-
- get(data->BrowserLstObj, MUIA_List_Visible, &visible);
- if(visible != -1)
- {
- get(data->BrowserLstObj, MUIA_List_First, &first);
-
- for(i = first; i < (first + visible); i++)
- {
- DoMethod(data->BrowserLstObj, MUIM_List_GetEntry, i, &bn);
- if(!bn) break;
-
- if(bn == data->Browser)
- {
- DoMethod(data->BrowserLstObj, MUIM_List_Redraw, i);
- break;
- }
- }
- }
-
- /* close edit site window */
-
- set(obj, MUIA_Window_CloseRequest, TRUE);
-
- return(TRUE);
- }
-
- /**************************************************************************/
-
- SAVEDS ASM ULONG BrowserEditWin_Dispatcher(REG(a0) struct IClass *cl, REG(a2) Object *obj, REG(a1) Msg msg)
- {
- switch(msg->MethodID)
- {
- case OM_NEW : return(mNew (cl,obj,(APTR)msg));
- case OM_GET : return(mGet (cl,obj,(APTR)msg));
- case MUIM_Window_Setup: return(mWindow_Setup(cl,obj,(APTR)msg));
- case MUIM_BrowserEditWin_Ok : return(mOk (cl,obj,(APTR)msg));
- }
-
- return(DoSuperMethodA(cl,obj,msg));
- }
-
- /**************************************************************************/
-
- static SAVEDS ASM VOID ObjStrFunc(REG(a0) struct Hook *hook,
- REG(a2) Object *obj,
- REG(a1) Object *string)
- {
- STRPTR port, dot, digit;
- char buf[UBN_PORT_LEN];
-
- if(hook->h_Data) CallHookPkt(hook->h_Data, obj, string);
-
- get(string, MUIA_String_Contents, &port);
- dot = strrchr(port, '.');
-
- if(dot)
- {
- dot++;
-
- for(digit = dot; *digit; digit++)
- if(!isdigit(*digit))
- return;
-
- stccpy(buf, port, dot - port);
- set(string, MUIA_String_Contents, buf);
- }
- }
-